package star.基础.异或求奇数;


/*
* 一组数有两个 数字个数 为奇数,其余均为偶数
*
* */
public class XorOddNumber2 {
    public static void main(String[] args) {
        int[] arr = {5,5,5,3,3,6,6,8,8,8};
        XorOddNumber2.xorOddNumber2(arr);
    }
    public static void xorOddNumber2(int[] arr) {
        //全部异或得到那两个数
        int eor = 0;
        for (int i = 0; i < arr.length; i++) {
            eor ^= arr[i];
        }
        //由于两个数不相同,异或不为0,int按照8位存储,至少有一位不相同(一个为0,一个为1),按照不相同的那一位,将数组分为两组
        //提取出最右边的一个1
        int rightOne = eor & (~eor + 1);
        int onlyOne = 0;
        for (int cur : arr){
            if ((cur & rightOne) == rightOne){
                onlyOne ^= cur;
            }
        }
        System.out.println(onlyOne+","+(onlyOne^eor));

    }
}
